/**
 * 1、常量构造函数需以const关键字修饰
 * 2、const构造函数必须用于成员变量都是final的类
 * 3、如果实例化时不加const修饰符，即使调用的是常量构造函数，实例化的对象也不是常量实例
 * 4、实例化常量构造函数的时候，多个地方创建这个对象，如果传入的值相同，只会保留一个对象
 * 5、Flutter中 const 修饰的组件只会构建一次，节省了重复构建造成的开销
 */

class Container {
  final int width;
  final int height;

  const Container({required this.height, required this.width});
}

void main() {
  var c1 = Container(height: 1, width: 2);
  var c2 = Container(height: 1, width: 2);
  // false（不是常量，不属于同一个对象）
  print(identical(c1, c2));

  var c3 = const Container(height: 1, width: 2);
  var c4 = const Container(height: 1, width: 2);
  // true
  print(identical(c3, c4));

  const c5 = Container(height: 1, width: 2);
  const c6 = Container(height: 1, width: 2);
  // true
  print(identical(c5, c6));
}
